package 刷题.leedcode_KY11;

import java.util.Scanner;

/*
第一步：对二叉树的结点进行定义，在TreeNode中保存
第二步：根据前序遍历还原二叉树createTable
       定义一个index表示在前序遍历中遍历过的元素的位置
       谦虚遍历数组String str
       1.空树，
       2.如果index小于数组str长度并且值不是#，则执行下面遍历
       if(index < str.length() && str.charAt(index) != '#'){
       index++;
       创建左子树
       root.left = createTable(str);
       创建右子树
       root.right = createTable(str);
       }
       未执行遍历说明str。charAt(i)为空，继续看下一个元素的值
       index++；
第三步：打印中序遍历，递归，左中右InOrder
       InOrder(root.left);
       System.out.print(root.val + " ");
       InOrder(root.right);
 */
public class Solution {
    //定义全局变量
    int index = 0;
    TreeNode root;

    //第二步：通过前序遍历还原二叉树
    public TreeNode createTable(String str) {
        if (index < str.length() && str.charAt(index) != '#') {
            root = new TreeNode(str.charAt(index));
            index++;
            //创建左子树
            root.left = createTable(str);
            //创建右子树
            root.right = createTable(str);
        } else {
            index++;
        }
        return root;
    }

    //第三步：打印中序遍历
    public void InOrder(TreeNode root) {
        if (root == null) {
            return;
        }
        InOrder(root.left);
        System.out.print(root.val + " ");
        InOrder(root.right);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            String str = scanner.nextLine();
            Solution tree = new Solution();
            TreeNode root = tree.createTable(str);
            tree.InOrder(root);
        }
    }
}